<?php
namespace frontend\controllers;

use Yii;
use yii\web\Controller;
use Weixin\Dialog\ResponseHandle;
use Weixin\Dialog\Validate;
use Weixin\Dialog\Response;
use backend\models\weixin\WeiFansLogs;


class WeixinController extends Controller{

    public $enableCsrfValidation = false;

    /**
     * 用于验证微信服务器
     */
    public function init()
    {


    }

    public function actionIndex()
    {
        define("TOKEN", "coffeedou");
        if (isset($_GET['echostr'])) {
            $validate = new Validate;
            $validate->valid();           
        }else{
            //分发请求
            $response = new Response;
            $response->responseMsg($this);
        }
    }

    /**
     * 文本消息处理
     * @params $postObj  xml消息对象
     */
    public function handleText($postObj)
    {
        //记录入库
        $fansLog = new WeiFansLogs();
        $fansLog->openid = $postObj->FromUserName;
        $fansLog->subscribe = 1;
        $fansLog->subscribetime = $postObj->CreateTime;
        $fansLog->save();

       //处理业务逻辑
        $content = '这是图片测试！';

        //返回响应结果
        return ResponseHandle::responseText($postObj, $content);
    }

    /**
     * 图片消息处理
     * @params $postObj  xml消息对象
     */
    public function handleImage($postObj)
    {
        //获取媒体消息Id，可用于下载
        $mediaId = trim($postObj->MediaId); 
        
        //图片链接
        $picUrl = trim($postObj->PicUrl);

        //处理业务逻辑
        $content = '这是图片测试！';

        //返回响应结果
        return ResponseHandle::responseText($postObj, $content);
        
    }

    /**
     * 语音消息处理
     * @params $postObj  xml消息对象
     */
    public function handleVoice($postObj)
    {
        //获取媒体消息Id，可用于下载
        $mediaId = trim($postObj->MediaId); 
        
        //语音格式
        $format  = trim($postObj->Format);

        //处理业务逻辑
        $mediaId = '23434';

        //响应语音消息
        return ResponseHandle::responseVoice($postObj, $mediaId);
    }

    /**
     * 视频消息处理
     * @params $postObj  xml消息对象
     */
    public function handleVideo($postObj)
    {
        return ;
    }

    /**
     * 短视频消息处理
     * @params $postObj  xml消息对象
     */
    public function handleShortVideo($postObj)
    {
        //获取媒体消息Id，可用于下载视频
        $mediaId = trim($postObj->MediaId); 
        
        //短视频封面图
        $thumbMediaId   = trim($postObj->ThumbMediaId);

        //处理业务逻辑
        $content = '这是短视频测试！';

        //返回响应结果
        return ResponseHandle::responseText($postObj, $content);
    }

    /**
     * 地理位置消息处理
     * @params $postObj  xml消息对象
     */
    public function handleLocation($postObj)
    {
        //地理位置纬度
        $locationX = trim($postObj->Location_X);

        //地理位置经度
        $locationY = trim($postObj->Location_Y);

        //地图缩放大小
        $scale = trim($postObj->Scale);

        //地理位置信息
        $label = trim($postObj->Label);

        //处理业务逻辑
        $content = '地理位置消息处理';

        //返回响应结果
        return ResponseHandle::responseText($postObj, $content);
    }

    /**
     * 链接消息处理
     * @params $postObj  xml消息对象
     */
    public function handleLink($postObj)
    {
        return ;
    }


    /**
     * 订阅事件消息处理
     * @params $postObj  xml消息对象
     */
    public function handleEventSubscribe($postObj)
    { 
        //记录入库
        $fansLog = new WeiFansLogs();
        $fansLog->openid = $postObj->FromUserName;
        $fansLog->subscribe = 1;
        $fansLog->subscribetime = $postObj->CreateTime;
        $fansLog->save();

        //为扫码关注事件
        if (isset($postObj->EventKey)) {
            //继续其他操作 
        }
        return ;
    }

    /**
     * 取消订阅事件消息处理
     * @params $postObj  xml消息对象
     */
    public function handleEventUnsubscribe($postObj)
    {
        return ;
    }

    /**
     * 用户已关注时扫描事件处理
     * @params $postObj  xml消息对象
     */
    public function handleEventScan($postObj)
    {
        return ;
    }

    /**
     * 上报地理位置事件处理
     * @params $postObj  xml消息对象
     */
    public function handleEventLocation($postObj)
    {
        return ;
    }

    /**
     * 自定义菜单事件click处理
     * @params $postObj  xml消息对象
     */
    public function handleEventClick($postObj)
    {
        //获取事件的key
        $evenKey = trim($postObj->EventKey);

        //响图文消息测试
        $articles = [
            [
                'title' => '2015年P2P行业年度报告：投资人数首破千万',
                'description' => '2015年度，我国P2P借贷行业累计交易规模约为9750亿元，是去年3倍有余。2015年参与人数首次突破千万。',
                'picUrl' => 'http://weixin.Org\Weixin.com/static/images/1.jpg',
                'url' => 'http://weixin.Org\Weixin.com/article/detail/1.php',
            ],
            [
                'title' => '认知技术时代：自动化如何重塑工作',
                'description' => '认知技术是人工智能领域的一个产品，有可能将取代人类的工作。但是，公司的管理层面临着「如何使用认知技术」的选择，这将决定工人是被边缘化还是被增。',
                'picUrl' => 'http://weixin.Org\Weixin.com/static/images/2.jpg',
                'url' => 'http://weixin.Org\Weixin.com/article/detail/2.php',
            ],  
        ];
        //返回响应结果
        return ResponseHandle::responseNews($postObj, $articles);
    }

    /**
     * 自定义菜单事件view处理
     * @params $postObj  xml消息对象
     */
    public function handleEventView($postObj)
    {
        //返回响应结果
        return ResponseHandle::responseText($postObj, '这是view');
    }

    /**
     * scancode_push：扫码推事件
     * @params $postObj  xml消息对象
     */
    public function handleScancodePush($postObj)
    {
        return ;
    }

    /**
     * scancode_waitmsg：扫码推事件且弹出“消息接收中”提示框
     * @params $postObj  xml消息对象
     */
    public function handleScancodeWaitMsg($postObj)
    {
        return ;
    }

    /**
     * pic_sysphoto：弹出系统拍照发图
     * @params $postObj  xml消息对象
     */
    public function handleSysPhoto($postObj)
    {
        return ;
    }

    /**
     * pic_photo_or_album：弹出拍照或者相册发图
     * @params $postObj  xml消息对象
     */
    public function handlePhotoOrAlbum($postObj)
    {
        return ;
    }

    /**
     * pic_weixin：弹出微信相册发图器
     * @params $postObj  xml消息对象
     */
    public function handlePicWeixin($postObj)
    {
        return ;
    }

    /**
     * location_select：弹出地理位置选择器
     * @params $postObj  xml消息对象
     */
    public function handleLocationSelect($postObj)
    {
        return ;
    }
	
}
?>